#include <boost/thread.hpp>
#include <iostream>

void wait(int seconds)
{
	boost::this_thread::sleep(boost::posix_time::seconds(seconds) );
}
boost::timed_mutex mutex;
void thread_func()
{
	std::cout << "Thread ID: " << boost::this_thread::get_id() << std::endl;
	for (int i=0; i<5; ++i){
		wait(1);
		boost::unique_lock<boost::timed_mutex> lock(mutex, boost::try_to_lock);
		if(!lock.owns_lock())
			lock.timed_lock(boost::get_system_time() + boost::posix_time::seconds(1));
		std::cout << "Thread " << boost::this_thread::get_id() << ": " << i << std::endl;
		boost::timed_mutex *m = lock.release();
		m->unlock();
	}
}

int main()
{
	std::cout << "Thread ID: " << boost::this_thread::get_id() << std::endl;
	std::cout << "#Physical Thread: " << boost::thread::hardware_concurrency() 
		<< std::endl;

	boost::thread t1(thread_func);
	boost::thread t2(thread_func);
	t1.join();
	t2.join();
}